package com.nbufe.utils;


import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 计算
 *
 * @author tz
 * @create 2023-08-04
 */
public class AnalysisUtil {

    /**
     * Integer相加
     *
     * @param i1       整数1
     * @param i2       整数2
     * @param integers 整数
     * @return int
     */
    public static int add(Integer i1, Integer i2, Integer... integers) {
        int result = toInt(i1) + toInt(i2);
        for (Integer integer1 : integers) {
            result += toInt(integer1);
        }
        return result;
    }

    /**
     * Integer相减
     *
     * @param i1       整数1
     * @param i2       整数2
     * @param integers 整数
     * @return int
     */
    public static int reduce(Integer i1, Integer i2, Integer... integers) {
        int result = toInt(i1) - toInt(i2);
        for (Integer integer1 : integers) {
            result = result - toInt(integer1);
        }
        return result;
    }

    /**
     * Integer相除,保留两位小数,四舍五入
     *
     * @param i1 整数1
     * @param i2 整数2
     * @return {@link BigDecimal}
     */
    public static BigDecimal divide(Integer i1, Integer i2) {
        if (toInt(i2) == 0) {
            return new BigDecimal(0);
        }
        return new BigDecimal(toInt(i1)).divide(new BigDecimal(i2), 2, RoundingMode.HALF_UP);
    }

    /**
     * Integer转int
     *
     * @param integer 整数
     * @return int
     */
    public static int toInt(Integer integer) {
        if (integer == null) {
            return 0;
        }
        return integer;
    }

    /**
     * 计算统计数
     *
     * @param boyNum  男生数
     * @param girlNum 女生数
     * @return {@link String} 例: 20.0%(18.8%/21.3%)
     */
    public static String calculateAnalysisNum(Integer boyNum, Integer girlNum) {
        return add(boyNum, girlNum) + "(" + toInt(boyNum) + "/" + toInt(girlNum) + ")";
    }

    /**
     * 计算统计概率
     *
     * @param boyTotalNum     男孩总数(分母)
     * @param girlTotalNum    女孩总数(分母)
     * @param boyAnalysisNum  男孩分析数(分子)
     * @param girlAnalysisNum 女孩分析数(分子)
     * @return {@link String} 例: 20.0%
     */
    public static String calculateAnalysisRate(Integer boyTotalNum, Integer girlTotalNum, Integer boyAnalysisNum, Integer girlAnalysisNum) {
        return calculateRate(add(boyAnalysisNum, girlAnalysisNum), add(boyTotalNum, girlTotalNum)) + "%";
    }

    /**
     * 计算百分比
     * @param v1
     * @param v2
     * @return
     */
    public static String calculateRate(double v1, double v2) {
        if (v2 == 0) {
            return "0.00";
        }
        BigDecimal b1 = new BigDecimal(v1).multiply(new BigDecimal(100));
        BigDecimal b2 = new BigDecimal(v2);
        BigDecimal divide = b1.divide(b2, 2, RoundingMode.HALF_UP);
        String s = String.valueOf(divide.doubleValue());
        if ("0.0".equals(s)) {
            s = "0.00";
        }
        String[] split = s.split("\\.");
        if (split[1].length() < 2) {
            s = s + "0";
        }
        return s;
    }
}
